package chen.bupt.text;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 根据所给数据，对数据进行清理
 * 
 * @author forrest
 * 
 */
public class TextClear {
	private static final String refRegex = "【 在 ?.+ 的大作中提到: 】?.+";
	private static final String hejiRegex = "%   [a-zA-Z0-9]* ?.+ 于  \\([a-zA-Z]{3} [a-zA-Z]{3}  [0-9]{1,2} [0-9]{2}:[0-9]{2}:[0-9]{2} [0-9]{4}\\)  提到:%%?.+";

	private static final String puncRegex = "[\\p{P}`×$<>|+~=^]";

	public static String clearText(String str) {
		if (isHeji(str)) {
			return "";
		}
		str = removeRefText(str);
		str = removePunctuation(str);
		return str;
	}

	// 判断文本是不是合集
	private static boolean isHeji(String str) {
		int len1 = str.length();
		str.replaceAll(hejiRegex, "");
		int len2 = str.length();
		return len1 != len2;
	}

	/**
	 * 
	 * @param str
	 *            原文本
	 * @return
	 */
	private static String removeRefText(String str) {
		if (str.startsWith("【 在 ") && str.contains("的大作中提到: 】")) {
			int index = str.indexOf(": ...................");
			if (index != -1) {
				return str.substring(index + 21);
			}
		}
		str = str.replaceAll(refRegex, "");
		return str;
	}

	private static String removePunctuation(String str) {
		return str.replaceAll(puncRegex, " ");
	}

	/**
	 * 词性说明： n 名词。t 时间。s 处所词。f 方位词。v 动词。a 形容词。b 区别词。z 状态词 r 代词。m 数词。q 量词。d 副词。p
	 * 介词。c 连词。u 助词。e 叹词。y 语气词。 o 拟声词。h 前缀。k 后缀。x 字符串。w 标点符号。
	 */
	/**
	 * 
	 * @param term
	 *            分词后带词性标注的词
	 * @return
	 */
	public static String getValidityTerm(String term) {
		if (term.contains("/t") || term.contains("/s") || term.contains("/f")
				|| term.contains("/z") || term.contains("/a")
				|| term.contains("/b") || term.contains("/m")
				|| term.contains("/r") || term.contains("/p")
				|| term.contains("/d") || term.contains("/c")
				|| term.contains("/u") || term.contains("/e")
				|| term.contains("/q") || term.contains("/y")
				|| term.contains("/o") || term.contains("/w")
				|| term.contains("/h") || term.contains("/k"))
			return null;
		// 是人名
		if (term.contains("/nr")) {
			return term;
		}

		return substring(term, "/");
		
	}

	public static String substring(String src, String tag) {
		int index = -1;
		if ((index = src.indexOf(tag)) != -1) {
			return src.substring(0, index);
		}
		return src;
	}

	/**
	 * @param args
	 */
	// private static final String hejiRegex =
	// "\\([a-zA-Z]{3} [a-zA-Z]{3}  [0-9]{1,2} [0-9]{2}:[0-9]{2}:[0-9]{2} [0-9]{4}\\)";
	public static void main(String[] args) {

		// System.out.println(clearText("你是一个好人吗？【 在 forrest 的大作中提到: 】heihei"));
		// System.out.println("  dfdf dasf   sdfsd".split(" ").length);
		String s = "  burndown (123) 于  (Tue Aug  3 09:20:44 2010)  提到:%%%爱灌水，也爱打卡%爱竞猜，更爱小旗子%爱看非诚勿扰，也爱看中国达人秀%爱和别人争收视率，更爱争论35个城市%爱抢沙发，也爱坐板凳%我不是体味受，也不是踢尾兽%我和你一样，只是汹涌大海里的一滴水%我和你不一样，因为我抢沙发抢的最多%我是沙发王%%%☆─────────────────────────────────────☆%   AllenNu (陈翔！王野！姜潮！陈骁！你们等我) 于  (Tue Aug  3 09:54:11 2010)  提到:%%呃呃~！@............%%你改成打卡贴吧%【 在 burndown (123) 的大作中提到: 】%: 爱灌水，爱打卡%: 爱竞猜，更爱小旗子%: 爱看非诚勿扰，也爱看中国达人秀%: ...................%%%%☆─────────────────────────────────────☆%   lovemangguo (明栎星晨) 于  (Tue Aug  3 09:57:59 2010) ";
		int len1 = s.length();
		s = s.replaceAll(hejiRegex, "");
		int len2 = s.length();
		if (len2 != len1) {
			System.out.println("ok:" + len1 + ":" + len2);
		}
		System.out.println("  sdfds dsfds sdf   ds  sdf"
				.replaceAll("[ ]+", " ").trim());
	}

}
